查看原文
其他

pandas可视化(2)【官方文档解读】-- 条形图、直方图

2017-08-02 王大伟 Python爱好者社区

作者:王大伟

Python爱好者社区唯一小编

博客:https://ask.hellobi.com/blog/wangdawei


点击上图即可限时半价购买课程

前言

前文传送门:pandas可视化(1)【官方文档解读】--基础绘图

如绘图过程中,中文字体和负号显示有问题,可以参照如下链接修改配置参数设置正常显示:

https://www.joinquant.com/post/441


环境

IDE : jupyter notebook

Anaconda 3.X


条形图

对于标记的非时间序列数据,你可能希望生成条形图:

import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
matplotlib.style.use('ggplot')#使用ggplot样式
%matplotlib inline

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
df = df.cumsum()

注:如前一章,先导入必要的模块和绘图的数据准备

plt.figure();
df.iloc[5].plot(kind='bar')
plt.axhline(0, color='k')

注:df.iloc[5]意思是取出df第6行(索引为5),然后绘制条形图

plt.axhline(0, color='k')指的是在y=0的位置画一条黑色的线


注:因为是随机产生的值绘图,你的图一般和我不一样,一样就厉害了!

这种为图所存在的内存地址位置


df2 = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df2.plot.bar()

注:如果看了前一章,以上代码很好理解,这里同一幅图绘制多个条形图比较


df2.plot.bar(stacked=True)

注:将a、b、c、d数据叠加起来绘制条形图



df2.plot.barh(stacked=True)

注:绘制水平叠加条形图


直方图df4 = pd.DataFrame({'a': np.random.randn(1000) + 1, 'b': np.random.randn(1000),
                   'c': np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
df4.head()


注:以标准正态分布为基础产生一个df4


plt.figure()
df4.plot.hist(alpha=0.5)

注:绘制直方图,alpha=0.5意思为透明度为50%


注:明明有三列数据,画出有六种颜色,应该是是颜色叠加出了新颜色


plt.figure()
df4.plot.hist(stacked=True, bins=20)

注:画堆积直方图(不会重叠,直观)bins=20指的是分为20个区段

图中没有显示20个因为正态分布距离中心远处取值可能心很小,可能只有个别值,在图中不明显



plt.figure();
df4['a'].plot.hist(orientation='horizontal', cumulative=True)

注:取出A列画横向累积直方图,采用默认10个区段



plt.figure()
df['A'].diff().hist()

注:diff为差分,即后一个减去前一个,我们看一下:

df['A'].diff().head()

注:显示A列中差分结果的前五个数


注意,第一个值不存在,因为原来的第一个数减去前面一个(第一个的前面一个数不存在),所以为NaN

差分后绘制的直方图为(默认为十个区段吧):



plt.figure()
df.diff().hist(color='g', alpha=0.5, bins=20)


注:df中四栏(4列)分别绘制一阶差分的图(绿色,半透明,分20区段),有种2x2子图的感觉


data = pd.Series(np.random.randn(1000))
data.hist(by=np.random.randint(0, 4, 1000),figsize=(6, 4))

注:这里产生1000个正态分布的随机数,然后使用hist方法中的by参数随机产生0-3中的整数(即0、1、2、3)

将原来的1000个正态分布的随机数对应上分组绘制四张图

图的长宽大小为6x4


pandas的绘图真美~~~~~~~~

pandas绘制条形图、正方图到此结束

文中所写如有谬误请指出,感谢!


参考文献

http://pandas.pydata.org/pandas-docs/stable/visualization.html#

微课福利:Hellobi live |8月22日,利用 Python 建构金融数据分析平台

查看下图说明免费参加或者点击文末阅读原文参加

关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。


Python爱好者社区


为大家提供与Python相关的最新技术和资讯。

长按指纹 > 识别图中二维码 > 添加关注

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存